package Link_Package;

public class EntryNode<T> {
    // 创建头部节点
    LinkNode head = new LinkNode();
    // 链表长度（不含头节点）
    int size;

    // 传入数组数据生成链表
    // 尾插法
    public void CreateLinkTail(T[] data) {
        size += data.length;
        for (int i = 0; i < data.length; i++) {
            LinkNode p = new LinkNode(data[i]);
            p.next = head.next;
            head.next = p;
        }
    }

    // 头插法
    public void CreateLinkHead(T[] data) {
        size += data.length;
        LinkNode<T> s = new LinkNode<>();
        s.data = data[0];
        head.next = s;
        for (int i = 1; i < data.length; i++) {
            LinkNode<T> p = new LinkNode<>(data[i]);
            s.next=p;
            s=p;
        }
    }

    // 配置getter和setter
    public LinkNode Getter(int index) {
        if (index >= size) {
            throw new IllegalArgumentException("超出链表范围");
        }
        // 通过节点拿到节点
        LinkNode<T> s = new LinkNode<>();
        s = head.next;
        for (int i = 0; i < index; i++) {
            // 首先要知道头部节点
            s = s.next;
        }
        return s;
    }

    public void Setter(int index, T t) {
        LinkNode s = this.Getter(index);
        s.data = t;
    }

    // 插入节点
    public void InsertNode(int index, LinkNode<T> newnode) {
        LinkNode<T> s = this.Getter(index - 1);
        newnode.next = s.next;
        s.next = newnode;
        size++;
    }
    // 删除节点
    public void DeleteNode(int index){
        if(index==0){
            head.next = head.next.next;
            size--;
        }else{
            LinkNode<T> s = this.Getter(index-1);
            s.next = s.next.next;
            size--;
        }

    }


}
